perm filename PIX.SAI[PIX,HPM]25 blob sn#238686 filedate 1976-09-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00043 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00006 00002	BEGIN "PIX"
C00009 00003	      IF CHR="?" THEN
C00012 00004	      IF CHR="T" THEN comment take a picture via a camera
C00014 00005	      IF CHR="↑" THEN comment optimize clip levels
C00019 00006	      IF CHR='175 THEN	comment  alter camera number
C00020 00007	      IF CHR="B" THEN	comment  alter bits/pixel, size and # to average
C00022 00008	      IF CHR="I" THEN	comment  input a file
C00024 00009	      IF CHR="%" THEN	comment  give information about a file
C00027 00010	      IF CHR="/" THEN	comment  input a portion of a file
C00030 00011	      IF CHR="O" THEN	comment  output a file
C00031 00012	      IF CHR="D" THEN	comment  video synthesizer display
C00035 00013	      IF CHR="H" THEN	comment  high quality halftone
C00039 00014	      IF CHR="R" THEN	comment  random halftone
C00041 00015	      IF CHR="A" THEN	comment  arty bug halftone
C00043 00016	      IF CHR="X" THEN	comment  send previous halftone to the XGP
C00044 00017	      IF CHR=">" THEN	comment  make a DD buffer into an MIT transferrable file
C00045 00018	      IF CHR="<" THEN	comment  display MIT transferrable file
C00046 00019	      IF CHR="#" THEN	comment  switch a video switch output
C00047 00020	      IF CHR="P" THEN	comment  list a picture on the tty
C00050 00021	      IF CHR="∂" THEN	comment  add a letter to a font
C00052 00022	      IF CHR="π" THEN comment  output dd buf to jarvis term.
C00053 00023	      IF CHR="λ" THEN	comment  make an XGPable file
C00055 00024	      IF CHR="C" THEN	comment  step past a certain number of pictures
C00056 00025	      IF CHR="K" THEN	comment  clear the video synthesizer
C00057 00026	      IF CHR="↔" THEN	comment  gronk synthesizer intensity table
C00059 00027	      IF CHR="S" THEN	comment  change size of displays
C00066 00028	      IF CHR="F" THEN	comment  high pass filter
C00067 00029	      IF CHR="L" THEN	comment  low pass filter
C00068 00030	      IF CHR="W" THEN	comment  select a window
C00071 00031	      IF CHR="Z" THEN	comment  change size of a picture
C00073 00032	      IF CHR="*" THEN	comment  general geometric transformation
C00078 00033	      IF CHR="U" THEN	comment  remove blank border from a picture
C00080 00034	      IF CHR="N" THEN	comment  apply noise remover
C00081 00035	      IF CHR="V" THEN	comment  apply interest operator
C00082 00036	      IF CHR="M" THEN	comment  pixel modification
C00084 00037	      IF CHR="G" THEN	comment  graph a histogram
C00087 00038	      IF CHR="J" THEN	comment  graph a histogram
C00090 00039	      IF CHR="E" THEN	comment  apply histogram normalizer
C00093 00040	      IF CHR="Y" THEN	comment  apply vert sync loss correction
C00094 00041	      IF CHR="Q" THEN	comment  exit
C00095 00042	         BEGIN       comment  an unrecognized character
C00097 00043	      END
αC00100 ENDMK
C⊗;
BEGIN "PIX"
REQUIRE "VIXHDR.SAI[VIS,HPM]" SOURCE_FILE;
require "outdd.rel[s,pmf]" load_module;
external procedure outdd(string s; INTEGER SPOS(2), PPOS(-1));

INTEGER CAMERA,CHR,HIG,WID,BITS,PWANT,PHAVE,PDEFAULT;
STRING BACKLOG;    REAL SSIZE,HSIZE,SASPECT,HASPECT;
INTEGER SDISWID,SDISHIG,SYPOS;   REAL MAPTF;  INTEGER MAPBT;
INTEGER HDISWID,HDISHIG,HAPOS;
BOOLEAN INITED,SYNLAS,HAFTONE;
INTEGER BCL,TCL,SUMS,XEE,YEE,NRTRY;
boolean outddcalled;
REAL TASPECT,TLEN,TWID;
REAL LXB,LYB,UXB,UYB;

INTEGER PROCEDURE UCONV(INTEGER I);
   RETURN(IF I>'140 ∧ I≤'172 THEN I LAND '137 ELSE I);

LXB←LYB←-1; UXB←UYB←1;
BCL←7; TCL←0;
YEE←0; XEE←1;
CAMERA←'54; BACKLOG←""; INITED←FALSE; SYNLAS←TRUE; HAFTONE←FALSE;
HIG←260; WID←288; BITS←4; SUMS←1;
PDEFAULT←PWANT←PHAVE←PIXDIM(HIG,WID,BITS);

TASPECT←6/10; TLEN←60; TWID←60;  NRTRY←100;
SSIZE←HSIZE←.5; SASPECT←HASPECT←260/288;   MAPTF←1;  MAPBT←4;
SDISWID←HDISWID←SDISHIG←HDISHIG←1; HAPOS←SYPOS←1;

DDINIT; SCREEN(-1,-1,1,1);
synmap(0,-1);
outddcalled←false;
ttyup(true);

OUTSTR("TYPE ? FOR HELP"&'15&'12);

WHILE TRUE DO
   BEGIN¬
   INTEGER ARRAY PIC[0:PHAVE];

   IF PHAVE=PDEFAULT THEN 
      BEGIN¬
      MAKPIX(HIG,WID,BITS,PIC[0]);
      INITED←TRUE;
      END;

   WHILE PHAVE-PWANT DO
      BEGIN
      MAPBT←MAPBTMAX PIC[BYBI];
      IF LENGTH(BACKLOG)=0 THEN¬
         BEGIN
         OUTSTR("*");
         DO CHR←UCONV(INCHRW) UNTIL CHR≠'15;
         END
∀@@@@A∃→'
A
⊃%?+
∨∃,Q1∨ Q¬¬π↔→∨≤RRv~(_@@@@A∪↓π⊃$zλ}DA)!≤~∀@@@@@@A¬∃∂∪≤~(@@@@@@@A=kiII
CYYK⊃?iek∀v~∀@@@@@@A∨+QIHPD@@@@@@@@@@@@@@@@@@A!%pAπ←5[C]IL~∀
∀λE(DD↓iCWJ↓BAaS
iceJ↓Me←Z↓Gkee∃]iYr↓gKYK
iKHAM←keG∀~∀DEλDDX@λE<DD0@yCYQ[←IJxAgKhαβ['∪,yβ∪'>KS'k/⊃βCπ⊗7↔S/∪M84R↓↓↓↓∧⊃β''→?Oπoβ3∃1π;';∪␈91αyε≠3'Aεc↔[↔g→1↓s∞cQiβ6K∪↔=¬≠?WK≡)↓#∪.3πW3#iQQ$hQ	
%∩⊃1↓	∀y		βNsCWQε{Iβ?/#CWQπβ'∂S/∪↔Mβ7∪?5β␈⊃βS=ε	β≠'f(4)	∩)		1α⊃	=	∩β≠?Iπ3↔KeεcπK∨*β≠'3/→9↓∃ε;↔SMε#'7↔w≠'?;~a↓=β⊗+π∪MεK9β¬πβπKPhP4)	∀!		β&KOC3∂IβS#*β∂WK⊗+;Qβ∧K∂SW⊗)β?9π##∃β6K∪↔=π≠g;SF+O'k/⊂4)	∀A		1α⊃
I	∩β?I↓∩∩¬		ε#'OCfeβ'"βπMβ
β#π37#?;∃αB!β∨}{⊃1α∩βKπ;&{51α
βπKSJH4)	∃↓		1α⊃λ!	∩β≠?Iε	β∂#∂∪π∂S/⊃β∪'∨β3πerαAβ?rβS#∃π#↔K7Nsπ11Aβ≠?∩β#π35#?;∃ε3?;S_h)	
B⊃	1↓∩⊂=		ε{WSC/!βS#*β7?O"βK↔∂.sQβ∪O≠C3πJaαaβ}qβS#*αb∞Ab=βSzβ¬β≠}sQβ≠Lc∀4)∩⊃q		b↓		y∩⊃β≠?∩α6&Qπ#Kπ;≡3↔KK∞∪3∃β6K3↔Mr↓qβSzβ∪'Oεcπeβ}s∃1↓rβS=βn/∃β|s∀4(hQ	
M∩⊃βO↔"β7W3&KC3'≡KSe1π≠#πC*βπ;⊃π≠'k∃ε{⊃β∪O≠C3πO→9β∪.3πW3#iGaEb↓E=Iπ≠'k∀hQ	

∩⊃βO/O↓βCπ≤εBε

nVn⊗↑ ε}∩∞9F␈'4¬π>F]dε&O>
F∂N≥lrεo]NFOεLTπεN>NW⊗/5⊃PR∩)4"∩b∧$!:∩$⊗66\>Bπ6≤LVzπ?≥g&F↑=↔V/%D∧Zε=LV∂∩
≡Bb↓t⊗&W↑:BεNnLVw≡≡O∩π&≤-F(h$$"~∩$6}vl\7"ε∀f␈⊗]≤vrπm≤F.z∞>vO&=∧εfNlTπ&z∀ε>Ol]bε≡≥fv.AQ hR$*r∩∩D∧"∃R$!Bα∩%$"∩ε|]vn/N-⊗~πN,⊗v6}-W~r
tπ>NlMw:b$π≡O,UBαR|Vv/,≥@hR$+∩∩∩D∧"∃*$$ε6O picture. Y vertical sync, U remove black border
""F"", ""L"", ""N"" or ""V"" filter the picture
     F high pass, L low pass (halve resolution), N remove noise, V interest
""G"" or ""J"" graph the numbers of each grey level. G raw, J integrated
""E"" enhance a picture (normalize the instances of each grey level)
""M"" modify grey levels via a function (entered piecewise linear)

""Q"" quit");

         OUTSTR('15&'12);
         END
      ELSE
      IF CHR="T" THEN comment take a picture via a camera;
         BEGIN
         INTEGER NRT;
         IF PHAVE=PDEFAULT THEN
            BEGIN
            IF ¬INITED THEN
               BEGIN
               MAKPIX(HIG,WID,BITS,PIC[0]);
               INITED←TRUE;
               END;
            NRT←CAMPIX(CAMERA,YEE,XEE,PIC[0],SUMS,BCL,TCL,NRTRY);
            OUTSTR("  "&(IF NRT<0 THEN " aborted" EHSE
                   CVS(NRT)&" RETR"&(IF NRT≠1 THEN "IES" ELSE "Y"))&'15&'12);
            IF NRT≥0 THEN
            OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
               " BYTES/LIN@
ApDMπ-LQ!βπm¬3¬∪tRLDA	∪)&←	3)
D_NbjL≤bdRv4∀@@@@@@@@@A9λ~)α↓↓↓↓α↓↓α⊗e~∀4)α↓↓↓↓α↓↓↓↓αα
⊗≡Lp4)↓α↓↓↓↓α↓↓↓↓∧∩ε∞.dz≡⎇
"⊃l4)α↓↓↓↓α↓↓↓↓ααB↑εu"}B∩,2εV2#X4)↓α↓↓↓↓α↓↓↓↓∧*:⊃lhQ↓↓↓α↓↓↓↓∧*:⊂4R↓↓↓↓αα⊗"N(h(1↓↓α↓↓α&2α∞"Ij∩y	α$B⊗9β≡{77↔w!β?C&K7'k*β∂3'αβ3↔[.cMl4R↓↓↓↓α↓↓↓α∀*≡&8hQ↓↓↓α↓↓↓↓¬~RJ&t9αN&sYα&:$*≡⊗I∧2>=lhQ↓↓↓α↓↓↓↓∧zVRN%⊃!	r≥⊃yα~⎇⊃αεV$yα>I¬"∞2&αaα
∞dJA↓!↓bR∞2Mr
∞dJ@q]KQ	%m¬~&:@y→d≤EyG0hR∧∧ααα∧∧α∧Ld	D,tzIαE≤→e⊃[α
I∧,pQ$ααα∧∧ααα∧∧α∧∀Xy∀ph!∀ααα
H4e|→jE≤≤→e¬≤LeHd|Z↔1PPJ∧∧α∧∀9KtLuJ84r
9∀rdiyrKXQ$ααα∧∧ααα∧∧α∧,hAPRα∧∧ααα∧∧∧,e8QPRα∧∧ααα∧∧αααλ(T<LaQ"αα∧∧ααα∧∧αα∧→jD,<Z$∧
∃(≠∩¬%6π%∧MλI∀jD	_re<_EC"MW1PRα∧∧ααα∧∧ααα	→e$,xZ"∧u*G0hPQ$ααα∧∧ααα∧∧α∧l→:∧MB		∀:ey_Bc"JK3¬j↔1PRα∧∧ααα∧∧ααα	j%%|8→U∧M¬λ4lZ(∩eLXUED,UJE[¬UF∩d∀9Ks:eH9E{αIj%%∃∃↔0hR∧∧ααα∧∧ααα∧	u-%:J"B∩∧∧"2D_d∧u∃GFα¬$λYbα∩≤&␈↔L\B∩∧YJ4(h$∧ααα∧∧ααα∧∧ααα∧∧αα∧:j2Du*E∩2∩
(U%∩$e∧L2	j%![∀
DD,d∧$L-4$∧,e8Tα∃J%∃∩2;⊗Tb;%↔0hR∧∧ααα∧∧ααα∧	∀2∧j*Akα
I∧,pQ$ααα∧∧ααα∧∧ααα∧λ$,<→aPRα∧∧ααα∧∧ααα∧∧α∧LjHT<-$λ∃∃∀≠∀¬%%6π#-W1PRα∧∧ααα∧∧ααα∧∧α∧LjHT<-$	∩e~Jπ0hR∧∧ααα∧∧ααα∧∧αα∧	~5$|u
E[¬UJE%[Q∪Xh$∧ααα∧∧ααα∧∧ααα
;sβXQ$ααα∧∧ααα∧∧ααα∧λd⎇∩	≠sα¬:HUαβ∀
Tu$→Dβ:∧It¬≥⎇55¬%%9≠U⎇%K2"TMU:E%[%)∩[
U↔0hR∧∧ααα∧∧ααα∧∧αα¬H9E{β4
¬{β4
tDLHTαE¬z¬5%%6uU$≤KU∪e~VfB∧$t
D≤ezH4b[↔1PRα∧∧ααα∧∧ααα∧∧α∧∀9Ks;Z
sβZ
y∧LdT¬¬¬⎇¬:E%[uX$≤eU↔E~+⊗$∧$zλ(4e|(9Bk1Q"αα∧∧ααα∧∧ααα∧∧∧⎇-J:E∩B*H4dMπT"4≥j5¬$≤E∀b∩αλ(4dMπT"4≥j5∧∀≤E∀b;Tds∩↔1PRα∧∧ααα∧∧ααα∧∧α∧,hG0hPQ$ααα∧∧ααα∧∧α∧,hG0hR∧∧ααα∧∧α∧,hAPRα∧∧αα∧YJ4(h bα∧∧αα∧_d∧≤E'Ts;T
DD,a≤6}n\]g"α≥G&/$6∞n↑,∩εw]\&/∪1Q"αα∧∧ααα∧λ$,<→aPRα∧∧ααα∧∧∧⎇
J:E∩B$λ4DihTb∧jYT∀-'$"KXQ$ααα∧∧αααλ8∀l-(≠t≥4u	∀t≤
yBKXQ$ααα∧∧αααλ(4e{w4¬$≤KvβXh$∧ααα∧∧αα∧Yh@hR∧∧αααλYE≤(Q bα∧∧αα∧_d∧≤E'T$∩∩
I∧,p≤=vnn]nBαε≥NF/∩-↔'~}
↔F.EDπ≡O,Tε∞vD∧2π&t↔6/,≤v+XQ$ααα∧∧αααλ(T<LaQ"αα∧∧ααα∧	∀u$XxU∩¬EHd|{4
5%∀→hr∧Lj:CXh!Q"αα∧∧ααα∧	u-%:J"B∩
	∀≥%Z(R∧DY_tE"D
tL%IαDtztα∩4:j2DD_u∩2∩D∧"4≥j5¬<LE∀b∩K$%∪Xh$∧ααα∧∧αα∧→j5%|→h4E<G1PRα∧∧ααα∧∧∧L2	HTt=I¬∧Lu:E∪s∩
I∧,pQ$ααα∧∧ααα∧∧α∧∀Xy∀ph$∧ααα∧∧ααα∧∧∧DL{y∀u%88∀rD→j5"diyrKZ
y∀%|→jE≤≤→e∧Lu:ED4|u↔0hR∧∧ααα∧∧ααα∧λTt#1Q hR∧∧ααα∧∧α∧⎇ZJ5%∩∧$¬∧L:JU∀*_T$<UD¬D,HxRαDizrα∩h:e~E_XR+∩∀d"bα$h55~λT*Jd%∪B∩↔1PRα∧∧ααα∧∧∧LU:KtLt9
tcXQ$ααα∧∧ααα	_b∧dYhu$B	→e≥"↔f"¬$λY`hR∧∧ααα∧∧ααα∧λ$,<α3C!$λλλ∧∧λλλ∧∧λ⊗1([NTSCAN(INST,FOO); XEE←INTSCAN(INST,FOO) MAX 1;
            END;

         OUTSTR(" NO. OF PICTURES TO AVERAGE (NOW "&CVS(SUMS)&"):");
         T←CVD(INCHWL); IF T>0 THEN SUMS←T;

         OUTSTR(" BITS/PIXEL (NOW "&CVS(BITS)&"):");
         T←CVD(INCHWL); IF T>0 THEN BITS←T MIN 36;

         OUTSTR(" SUPPRESS PARTIAL RETRIES?");
         NRTRY←(IF (INCHWL LAND '137)="Y" THEN -200 ELSE 100);

         PDEFAULT←PWANT←PIXDIM(HIG,WID,BITS);

         END
      ELSE
      IF CHR="I" THEN	comment  input a file;
         BEGIN
         STRING FN;
         IF LENGTH(BACKLOG)=0 THEN
            BEGIN~∀@@@@@@@@A∨+)M)$PE→∪→
tλRv~∀@@@@@@@@A∪A1≥∂) Q
≥?%≥π⊃/0R|`@⊂A!
→⊃∪~Q
8R|`AQ⊃≤~(@@@@@@@@@@@@A¬∂%≤~∀@@@@@@@@@@@@AA/β≥)⎇!
→	%~Q
≤$v~∀@@@@@@@@@@@@A	βπ↔→=∂>E∩λM
≤v4∀@@@@@@@@@@@@A≥⊂A→'∀A∨+)M)$PE¬E←ei∃HDLNDjLNbHRv~∀@@@@@@@@A≥λ4∀@@@@@@@↓→'
4∀@@@@@@@@@A¬∃∂∪≤~(@@@@@@@@@A∂Q!
_Q	βπ↔→=∞Q!∪
6a:Rl~∀@@@@@@@@@A=+)')HQπ-&!!∪π7Aπ→≥:$LDA→%≥&A`@DMπY&Q!∪
7→≥¬e:RL~(@@@@@@@@@@@@DA¬3Q&←→%≥αApDMπ-LQ!βπm¬3¬∪tRLDA	∪)&←	3)
D_NbjL≤bdRv4∀@@@@@@@@@A¬¬π↔	∨≥>DDv4∀@@@@@@@@@A∪9∪)	⎇
β→'∀v~∀@@@@@@@@@↓∃λv4∀@@@@@@@↓≥λ~(@@@@A→'∀~∀_@@@@A∪↓π⊃$zλJDA)!≤∪G=[[K]P@AOSYJAS]→←e[CQS←\A¬E←kh↓BAMS1Jv~∀@@@@@@A¬∃∂∪≤~(@@@@@@@AM)%∪≥≤A
≤v4∀@@@@@@@↓∨#)'Q$PE
%→
dD$v~∀@@@@@@A∪↓→≥∂Q⊂Q
≥⎇∪≥π⊃]_R|`λA!
1	∪~Q→_R|`↓)⊃≤4∀@@@@@@@@@A¬∃∂∪≤~(@@@@@@@@@A∪≥Q∂$↓β%%βdA⊃	6@tba:l~∀@@@@@@@@@A≥)!
⊂Q
≤Y!	6a:αIl4)α↓↓↓↓α↓↓↓↓αα>VR≥"I"∞5→""∩]α∞2:jI→	αdJ:εMπA↓	~≥2M""%Z2:
Mi%_∀R↓↓↓↓α↓↓↓↓α↓↓↓↓α⊃α
f$*M>2Lr∃β@∧∧"4≥j5∧D%8+∀∀MU∀b∩∧)~E~|+~D*∩dv∪*2v⊗"KXQ$ααα∧∧ααα∧∧α∧,hD∧,e8T∧⎇
J:E∩B,≤&␈↔L\B∩2v⊗R2≠⊗!∪Xh$∧ααα∧∧αα∧Yh@hR∧∧αααλYE≤(Q bα∧∧αα∧_d∧≤E'P"z∩λI∧,pα8{m]9;]∧∧~;\∞↑λ_ ∞
|]~-⎇H≠p∪λ0P3$[2YFEλ⊂⊂⊂⊂λ⊂⊂⊂!⊃c`	N
         STRING FN,IJFL;  OWN INDEGER LY,LXHY,HX,CMP,BT;
         INTEGER FOO;
         IF LENGTH(BACKLOG)=0 THEN~∀@@@@@@@@A¬∂%≤~∀@@@@@@@@@↓∨ ⊗R≥"I!
4J2∃I∩Il4)α↓↓↓↓α↓↓↓↓αα&→αd*:=I¬∧4uy→d≤EyE∪sαD¬∧4HI∀jDie∪sα
I∧,pβ"H∧∧λλλ∧∧λλλ∧∧λλ⊂HXp3C!$λλλ∧∧λλλ∧∧λλλ∧	3U⊃(x4H⊂**P6(	λ⊗l∞F⊗↔.c!$λλλ∧∧λλλ∧∧λλλ∧λq1∀λh
⊃SEI⊃⊗lU.c"D∧λλλ∧∧λλλ∧∧λλλ	z5∀u
%⊂uTe	⊃⊗tλ9∪W"$dH∪∩)hαiP,λ⊃∪!k∀T$"-S'!,nJSαE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊃⊂!⊗j"iWS$g"P≡⊂⊃∪!U)P$"⊗a(a$WTS⊃⊂⊂αITS/BYTE"&'15&'12);
               BACKLOG←"/"&FN;
               OUTSDR("LOW Y, LOW X (IN PIXELS):"); INFL←INCHUL;
               LYWINTSCAN(INFL,FOO)9  LX←INDSAAN(ILFL,FOK);
               LY←(LY MAX 0) MIN (HD[PCLN]-1); LX←(LXMAX 0) EIN (HD[LNBY]-1);
               OUTSTR("LIJEAR COMPRESSIOJ FACTOR:"); INBL←INCHWL;
               CMP←@∪≥Q'πβ≤!∪≥
_1
∨≡Rl~∀@@@@@@@@@@@Aπ≠A?π≠ ↓≠β0@Dv~∀@@@@@@@@@@@A∨U)')$ A⊃∪≥⊃(HA]∪	)⊂↓β≥λA	∪)&←A∪1_↓∨A%∃'+→(hDRfA%≥¬→?%≥π⊃/0v~∀@@@@@@@@@@@A⊃e?∪≥)Mπβ≤Q%≥
_Y→∨≡RvA⊃1?%≥)'π¬≤Qβ≥→_Y
∨<Rv~∀@@@@@@@@@@@A%A⊃2t`A)⊃∃≤A⊃3|djlv↓∪A⊃`z`A)!≤A⊃a>djll~∀@@@@@@@@@@@A⊃3|Q⊃2A5β0@b$A≠∪≤Q⊃	7Aπ→≥:5→2RK
≠ v~(@@@@@@@@@@@@↓⊃1>Q!0A≠β`@bRA5∪≤@Q!	7→≥	3:[→`RKπ≠@v~∀@@@@@@@@@@@A¬Q?∪≥)Mπβ≤Q%≥
_Y→∨≡Rv↓∪A¬Pz`A)!≤A¬Q?⊃	7	3¬∪:l~∀@@@@@@@@@@@A¬)|Q¬(A5β0@b$A≠∪≤flv~(@@@@@@@@@@@@↓!/β≥Q?!∪1⊃∪~Q⊃dY⊃0Y	(Rv~(@@@@@@@@@@@@↓∃λA∃→'
A=+)'	HPECE=eaKHλLNbj_NbdRl~∀@@@@@@@@@A∃≥~∀@@@@@@A1'
~∀@@@@@@@@A¬∂%≤∩∀@@@@@@@@@↓≠β↔!%0Q⊃∩1⊃0I¬PY!βπla2Rv4∀@@@@@@@@@A∂∃)!
 !¬βπ↔1∨∞Y!%π6a:αb2e2eA2∞6αb∞&AKX4)↓α↓↓↓↓α↓↓↓↓∧zVRNαJ"D≥j5¬∧L9:∧≤dkQ∩2∩	I∀t4h⊗∧∧IPuJ5∀∩0k9∪PV+U)C"D∧λλλ∧∧λλλ∧∧λλλ∧$⊂V5λZhπf$S ¬ xDEπ-LQ!&≥Z
f
Mi%→	∧∩&RM|∩fR∃⊂1≥EU29EI%Xh)↓↓α↓↓↓↓α↓↓↓α∀
∞.Ixuz∩'1PRα∧∧ααα∧∧ααα	→dM$XKt4J8SXh$∧ααα∧∧ααα∧∧∧,@Q∞c!$λλλ∧∧λλλλYQβ"D∧λλλ∧λ3∀q!Q@↓Dλλλ∧∧∩1Hλ9∀O(ItH∃∩λYB8{m]9;]∧∧≠⎇=∞∞=λ_$Z;→'1"Hλ∧∧λλλ∧∧⊂Q1i→@εE⊂λ⊂⊂⊂⊂λ⊂⊂)j∀$g#P⊃'≥FEλ⊂⊂⊂⊂λ⊂⊂⊂'Uj)j)
⊃#$f⊃]⊃∀]CE⊂⊂⊂λ⊂⊂⊂⊂λ$c⊂&⊃g#j$
#'/dS!d+f
MX⊂*∩"g⊂(∃j(#&
($amL.V#'
FA⊂⊂λ⊂⊂⊂⊂λ⊂"f)QP'jj∀h)∀⊃_q7y:→r⊃∪∪LZS∪XL∀]FEλ⊂⊂⊂⊂λ⊂⊂⊂"S"εE⊂λ⊂⊂⊂⊂⊃f)bFB      IF CHR="D" THEN	comment  video synthesizer display;
         BEGIN
         INTEGER I,J;
         REAL SX,SY,ASP,ASPEN;
         REAL PX,PY; INTEGER MODP;

         SYNLAS←TRUE;

         MODP←SYPOS MOD (SDISWID*SDISHIG);
         PX←MODP MOD SDISWID;
         MODP←MODP%SDISWID;
         PY←SDISHIG-MODP-1;
         PX←2*PX-SDISWID+1;
         PY←2*PY-SDISHIG+1;

         SX←1; SY←1; ASPEN←SASPECT*SDISWID/SDISHIG;
         ASP←PIC[PCLN]/PIC[LNBY];
         IF ASP>ASPEN THEN SX←ASPEN/ASP ELSE SY←ASP/ASPEN;

         SX←SX*SSIZE;  SY←SY*SSIZE;

         SETFORMAT(0,2);
         SCREEN(-SDISWID,-SDISHIG,SDISWID,SDISHIG);

         MAPGRY(MAPTF,MAPBT); GRAY(PIC[0]);
         I←PIC[BYBI];
         IF SYNMAP(I)>0 ∨ SDISHIG*SDISWID>1 THEN
            BEGIN~∀@@@@@@@@A∪AM	∪'⊃%∞U'	%'/∪λxbA)⊃∃≤A∂Q		P		λDM
-&Q∩$LD])5!7)≠@Y⊃!≠tDRv~(@@@@@@@@@A	%-≤vAIπ)β8Q!0ZDY!2ZDY!0VDY!2VDRv~∀@@@@@@@@A-∪λ!→1¬?A0['01→3¬?A2['21+1¬?A0W'01+3¬?A2W'21!∪π6A:XbRl~∀@@@@@@@@@A%A'39≠β Q$R|`AQ⊃≤~(@@@@@@@@@@@@↓¬∂∪8~∀@@@@@@@@@@@A∀
N∃"≥J:6εαB%%%Xh)↓↓α↓↓↓↓α↓↓↓↓α↓α~>∩α*mEc	1Eα$yα∩BM*A"NLr6εADI%%lhQ↓↓↓α↓↓↓↓α↓↓↓↓αα⊗*⊃Xh)↓↓α↓↓↓↓α↓↓↓α≤B>↑¬B9Q]%Xh)↓↓α↓↓↓↓α↓↓↓αL1αN∩M~"&≥U~∩&N<J⊃yE¬""⊗9¬αVR∩$1!
∩"⊃~∞Z~B%%→∩rR6B]"6A∩Eα6u	KX4)↓α↓↓↓↓α↓↓↓↓∧*:↓lhQ↓↓↓α↓↓↓↓∧2>IαMzB&∞\∩f
&jiEαN$*A↓5
αV:RLa↓Aα$x4)↓α↓↓↓↓α↓α&→¬~f:6
↓"%%s↓⎇α≤"&N"L9*N∩M~↑&⊃q	αR",p4)↓α↓↓↓↓α↓↓↓↓∧∩⊗≡→aPRα∧∧ααα∧∧ααα	_b¬≤I~4DLu*4$M8y∀#s∀
DD,dλt-$HHbB∀HD"4≥j5∧JJd%e$m:DmαI
∧mj%↔0hR∧∧ααα∧∧ααα∧λE∀\Y`∞d
Q0uλ→J∀⊗¬V+∀⊗%V+∀⊗¬6+∀⊗%6*.c!$λλλ∧∧λλλ∧∧λ∃R(E∪⊗⊂Kz⊗4k¬∪⊗0Kz⊗+4k∃∃0!↔h,∃iV⊗*la↔h,UiVVεE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂∀$amH↔V_P&∀d⊂∀(∩ama,P$nV@1-I));
            IF SYNMAP(I)>0 THEN
               BAGIN
               E@%¬'
Q'e≥≠β !∩RRv4∀@@@@@@@@@@@A
∨$↓∃6bXDXbA	<A	!3U Q'39≠β Q$RRv~(@@@@@@@@@@@@↓⊂~⊃Xh)↓↓α↓↓↓↓α↓↓↓α≤B>↑¬B9Q]%Xh)↓↓α↓↓↓↓α↓↓↓αL1αN∩M~"&≥U~∩&N<J⊃yE¬""⊗9¬αVR∩$1!
∩"⊃~∞Z~B%%→∩rR6B]"6A2Eα6u	KX4)↓α↓↓↓↓α↓↓↓↓∧*:↓lhQ↓↓↓α↓↓↓↓¬*:≡J
I"Bε≥YBu%Xh)↓↓α↓↓↓↓αα"ε~$z:⊗}%∩V∃LhQ↓↓↓α↓↓↓↓¬~fB>≥zNfB⎇→-ELhQ↓↓↓α↓↓↓↓∧zVRN%⊃!
E*1≥EI2⊃)	%Xh)↓↓α↓↓↓↓ααN">:A≥Q]KX4)↓α↓↓↓↓α↓α∩=∧∩ε∞.dz≡}&t~"J]¬*:R&bα
ε∞\b>≤m;	T∩
~.2>9Y≥EIXh)↓↓α↓↓↓↓ααN">:A5E%Xh)↓↓α↓↓↓↓αα⊗ 4AQ"αα∧∧α∧,J8PhPbα∧∧αα∧_d∧≤E'T$B∩
I∧,p≤=vnn]nBαε
≤vBπ≡\⊗fOO∀εF∞LnF}vW1PRα∧∧ααα∧∧∧∀,y→`hR∧∧ααα∧∧α∧LjHT<-$	"d≤	g0hR∧∧ααα∧∧α¬∀X→B¬≥¬J5Jd~:αd
:λTsXQ$ααα∧∧ααα
(Tb
αe¬↔4∧LuHXt-∩	Yt%β1Q hR∧∧ααα∧∧α¬≥→iD
≥xh∀e≤W1PPh$∧ααα∧∧αα∧YxE¬|λ~∧⎇~	Yt"α	λDM≥y_BTDI~4DLu↔0hR∧∧ααα∧∧ᬬyT|%∧	T|"	λDM≥y_CXh$∧ααα∧∧αα∧YxE¬|YxEα,λI∃≥<_G0hR∧∧ααα∧∧ᬬ≠y∧$M9	∀:lYxEαk↔1PRα∧∧ααα∧∧¬¬Ev%%¬BYλDM≥y_B[1Q"αα∧∧ααα∧
¬M{%*¬JlλI∃≤D_u3XQ!PRα∧∧ααα∧∧¬≥Ev↔2¬≥≠v∪Z∧~:∧,uβr⊂*:⊃0u¬)⊃∩4jy1rλI4r∩(wc"H∧∧λλλ∧∧λ⊂4jt∩0k:⊂s∪KUt∩0k9∪PV+Wc"H∧∧λλλ∧∧λ∩1Dλ4t∂H~t⊃3D
∩⊃3D
v↔p*:⊃3Kh~tλ⊃)Jq(∀k≠p4t¬x4t⊃)gc"C!$λλλ∧∧λλλ
;↔tv¬)∀r6HWh∀v+zv*R
96Q.aQC"H∧∧λλλ∧∧λ∀pj(13J¬Y⊃∩4jy1)λ∩4r	_k∩⊃	~ur1¬I⊃∩4i	1j.aQHλλ∧∧λλλ∧	1H∩λI4r∩(uR⊃∩*:r1∂F∀∃∩⊃)d⊃q5λH⊃JλHHU∪*u∪4¬I∀∪7$%.c"D∧λλλ∧∧λλ⊃
)q3Nd
Q0uλ→J∀⊗¬V+∀⊗%V+∀⊗¬6+∀⊗%6*.c!$λλλ∧∧λλλ
i1⊃3e	⊗⊂Wj4v¬I⊗0Wj+4v%J6⊂Wj
tv¬J60Wj*tv%J∩0vf+,E↔c"H∧∧λλλ∧∧λ⊂r	kqq⊃λ9∪J&∃.c"D∧λλλ∧∧λλ⊃*(4q*λ9∪J.aQHλλ∧∧λλλ∧λStH	+l+%F++ε∃(⊃	t⊃∀⊗*Z
⊂r	e.c"D∧λλλ∧∧λλ∪jZ∀u∀E∧H⊂rλ→SQ3∧∧IPuIzj⊂r	e)Il&TIl,E↔c"H∧∧λλλ∧∧λ∀r	zj⊂r	e.c"A∀∩⊂1JIsQ7jJU1.aQHλλ∧∧λλλ∧	1H∩λI4r∩(uR⊃∩*:r1∂F∀∃∩⊃)d∀∃5λH⊃JλHHU∪*u∪4¬I∀∪7$%.c"D∧λλλ∧∧λλ∩λ~∪twiλ4∪te6.c"D∧λλλ∧∧λλ∪jZ∀u∀E∧JHJ'1"Hλ∧∧λλλ∧∧⊃∪hλ(0rs	xwr3H9∀Uh
YU∩3∧λP0riIqfif⊗!⊂P(9s∪qc4l,NaQHλλ∧∧λλλ∧
r∪ue¬,*.aQHλλ∧∧λλλ∧
Q⊃⊂i	J⊂r	e.c"D∧λλλ∧∧λλ⊃)hβ"H∧∧λλλλY∀q#! ↓Dλλλ∧∧∩1Hλ9∀O(J$H∃∩λYB8{m]9;]∧∧≤X;LM{(~≥→]≠ml.c"D∧λλλ∧∧λλ⊂HXr3C!$λλλ∧∧λλλ	→U⊃1hZH∩Kλ9∪Nc!$λλλ∧∧λλλ
(03λ
;∀v%H4tλ~t⊃3G1"Hλ∧∧λλλ∧∧∀Q0)D∀⊗
.h∩)j⊃1q*$∪3q
πc"C!$λλλ∧∧λλλ
;3S⊂*;qP3
8.c"AQHλλ∧∧λλλ∧	3q∀y⊂4∪j4∪3q∧¬∩⊃∩*:r1
Iλ∩4r	_j.c!$λλλ∧∧λλλ
↔s3hJλ∪3hD∩⊃∩*:r1∞aQHλλ∧∧λλλ∧	3q∀y3q∀∧Y⊃∩4jy1∞c!$λλλ∧∧λλλ
7r⊃	~r∩1eY3q∀¬V.c"D∧λλλ∧∧λλ∀lJT¬2⊃∩*:r1
f↔c"H∧∧λλλ∧∧λ∀⊗+vJT⊗%Y⊃∩4i	1jl'1"C"D∧λλλ∧∧λλ∀kl.h
;7l.dλ4t⊃)kr⊂4jλ0u
Iλ∩4ui_r⊃	~r∩1g1"Hλ∧∧λλλ∧∧⊂4tz∩0vjλs∪W%z∩0viIPV7'1"Hλ∧∧λλλ∧∧∩1Hλ~t∂P*:⊃3H
I⊃3H
;↔p4jλ3Kp*:λ⊃3
8(∀v+x4th~t⊃3G1"C"D∧λλλ∧∧λλ∀ktv
I
r6Q'4∀v7j;*R∀i≠Q.c!!"Hλ∧∧λλλ∧∧∀ptHX3J)λ∩4ui_2λI4r∩(u∩⊃∩*:r1	λ∩4r	_j.c!$λλλ∧∧λλλ	_H∩⊃	~r∩1e)⊃∩4jy1∂L$
∩⊃3Dλq5⊃λHJλQλEU∪4:∪4	
∪7(E↔c"H∧∧λλλ∧∧λ⊃∀I83Nh
(0u⊂)e∀⊗&∃∀⊗+&∃∀⊗
f∃∀⊗*f∃.c"D∧λλλ∧∧λλ∃I_
∪⊗λ+t⊗*;∪⊗(+t⊗+*;+∃6λ+t⊗
j;∃6(+t⊗*j;+∀∩(;l↔+¬V*.c!$λλλ∧∧λλλλ9∪WqhH⊂r∪E¬,*.aQHλλ∧∧λλλ∧	u5∀jJJλHλ9⊂3SHYλλIH:Stjλ9∪J)Dv-)If⊗J.c!$λλλ∧∧λλλλZP4q%λr∪J'1"Hλ∧∧λλλ∧∧⊃StD	Wl+ε∃+%F+(λIh⊃∀~4
⊂i	J.c!$λλλ∧∧λλλ
9∪ujλ9∪J.aQB(∩λ_U∪sH[u∀U(Wc"H∧∧λλλ∧∧λ∩1D	⊃∩4i	1jRλI4ur(GL(∃	λ3H∀
Z⊃⊃⊃E∧Q⊃JI4⊗u	Z∩∀	[(J.aQHλλ∧∧λλλ∧	⊂4∪j;r⊂4	zjl.aQHλλ∧∧λλλ∧	u5∀jJJλJD%.c"D∧λλλ∧∧λλ⊃	t⊂P0i9∪qwi→Pr∀Jt∃3U	→λ⊂P(9s∪qc4l-!λ(0rs	xfil&'c"H∧∧OW(-1);
         RDDCHN(CHN);
         END
      ELSE
      IF CHR="A" THEN	comment  arty bug halftone;
         BEGIN
         INTEGER J,CHN;
         REAL SX,SY,ASP,ASPEN;
         REAL PX,PY; INTEGER MODP;

         SYNLAS←FALSE;

         MODP←HAPOS MOD (HDISWID*HDISHIG);
         PX←MODP MOD HDISWID;
         MODP←MODP%HDISWID;
         PY←HDISHIG-MODP-1;
         PX←2*PX-HDISWID+1;
         PY←2*PY-HDISHIG+1;

         SX←1; SY←1; ASPEN←HASPECT*HDISWID/HDISHIG;
         ASP←PIC[PCLN]/PIC[LNBY];
         IF ASP>ASPEN THEN SX←ASPEN/ASP ELSE SY←ASP/ASPEN;

         SX←SX*HSIZE; SY←SY*HSIZE;

         SCREEN(-HDISWID,-HDISHIG,HDISWID,HDISHIG);
         IF HDISHIG*HDISWID>1 THEN GETDDF("DD.TMP[TMP,HPM]");
         DRKEN; RECTAN(PX-1,PY-1,PX+1,PY+1);
         VIDEO(LXB←PX-SX,LYB←PY-SY,UXB←PX+SX,UYB←PY+SY,PIC[0],-4);
         CHN←GDDCHN(-1);
         ERASE(CHN);
         FOR J←1,1,1,1,1,1 DO DPYUP(CHN);
         OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
         SHOW(CHN);
	 HAFTONE←TRUE;
         IF HDISHIG*HDISWID>1 THEN PUTDDF("DD.TMP[TMP,HPM]");
         HAPOS←HAPOS+1;
         OUTSTR("*");
         DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
         SHOW(-1);
         RDDCHN(CHN);
         END
      ELSE
      IF CHR="X" THEN	comment  send previous halftone to the XGP;
         BEGIN
         INTEGER J;
	 OUTSTR("SIZE (-5 to +5):");
	 J←CVD(INCHWL);
         IF J≠0 THEN
            BEGIN
            IF HAFTONE THEN BEGIN INVEN; RECTAN(-1000,-1000,1000,1000); END;
            XGPUP(J);
            IF HAFTONE THEN BEGIN INVEN; RECTAN(-1000,-1000,1000,1000); END;
            END
	 ELSE
	    OUTSTR("aborted"&'15&'12);
         END
      ELSE
      IF CHR=">" THEN	comment  make a DD buffer into an MIT transferrable file;
         BEGIN
         OUTSTR("OUTPUT FILE NAME:");
         IF ¬PUTMIT(INCHWL) THEN OUTSTR("aborted"&'15&'12);
         END
      ELSE
      IF CHR="<" THEN	comment  display MIT transferrable file;
         BEGIN
         INTEGER J,CHN;
         OUTSTR("INPUT FILE NAME:");
         DRKEN; RECTAN(-100,-100,100,100);
         IF ¬GETMIT(INCHWL) THEN OUTSTR("aborted"&'15&'12)
         ELSE
            BEGIN
	    CHN←GDDCHN(-1);
	    OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
	    ERASE(CHN);
	    FOR J←1,1,1,1,1 DO DPYUP(CHN);
	    SHOW(CHN);
	    OUTSTR("*");
	    DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
	    RDDCHN(CHN);
	    SHOW(-1);
            END;
         END
      ELSE
      IF CHR="#" THEN	comment  switch a video switch output;
         BEGIN
         INTEGER J,K;
	 OUTSTR(" LINE:"); J←CVO(INCHWL);
	 OUTSTR("CHANNEL:"); K←CVO(INCHWL);
         SHOW(K,J);
         END
      ELSE
      IF CHR="P" THEN	comment  list a picture on the tty;
         BEGIN
         INTEGER I,J,K,L,M;
         REAL ASP;
         INTEGER SX,SY;

         ASP←PIC[PCLN]/PIC[LNBY];

         SX←TWID; SY←SX*ASP*TASPECT;

         IF SY>TLEN THEN BEGIN SX←SX*TLEN/SY; SY←TLEN; END;

            BEGIN
            REAL ARRAY TMP[-1:SY,-1:SX];
            REAL PCMAX;

            PCMAX←2↑PIC[BYBI]-1;
            FOR I←0 STEP 1 UNTIL SX-1 DO
            FOR J←0 STEP 1 UNTIL SY-1 DO
               TMP[J,I]←PIXEL(PIC[0],PIC[PCLN]*J%SY,PIC[LNBY]*I%SX)/PCMAX;

            CALL(0,"RESET");

            OUTSTR('15&'12);
            FOR J←0 STEP 1 UNTIL SY-1 DO
              BEGIN
              FOR I←0 STEP 1 UNTIL SX-1 DO
                 BEGIN¬
                 REAL ERR;
                 IF (ERR←TMP[J,I])<0.5 THEN OUTSTR("*") ELSE
                    BEGIN
                    OUTSTR(" ");
                    ERR←ERR-1;
                    END;
                 ERR←ERR/16;
                 TMP[J+1,I-1]←TMP[J+1,I-1]+3*ERR;
                 TMP[J+1,I]←TMP[J+1,I]+5*ERR;
                 TMP[J+1,I+1]←TMP[J+1,I+1]+ERR;
                 TMP[J,I+1]←TMP[J,I+1]+7*ERR;
                 END;
               OUTSTR('15&'12);
               END;
            END;
         END
      ELSE
      IF CHR="∂" THEN	comment  add a letter to a font;
         BEGIN
         INTEGER LETR;  STRING FOFIL;

         OUTSTR("FONT FILE:"); FOFIL←INCHWL;
         OUTSTR("LETTER:"); LETR←INCHWL;
         DDFONT(LXB,LYB,UXB,UYB, FOFIL, LETR);

         END
      ELSE
      IF CHR="π" THEN comment  output dd buf to jarvis term.;
         begin
         if ¬pjup then outstr("pjup failed, try again.");
         outstr('15&'12);
         end
      ELSE
      IF CHR="λ" THEN	comment  make an XGPable file;
         BEGIN
         INTEGER I,J,K,L,M;  REAL D,G,O;  STRING S;
         OPEN(1,"DSK",0,0,3,0,0,M);
	 M←0;
	 DO
	   BEGIN
	   OUTSTR("OUTPUT XGP FILE NAME:");
	   ENTER(1,INCHWL,M);
	   END
         UNTIL ¬M;
         OUTSTR("DENSITY (0 (normal) to 1):"); D←REALSCAN(S←INCHWL,M);
         O←'77+'40*D; G←(D+1)*'40/2↑PIC[BYBI];
	 FOR I←0 STEP 1 UNTIL PIC[PCLN]-1 DO
            BEGIN
            FOR J←0 STEP 1 UNTIL PIC[LNBY]-1 DO
               OUT(1,M←O-G*PIXEL(PIC[0],I,J));
            OUT(1,'15&'12);
            END;
         CLOSE(1);
         END
      ELSE
      IF CHR="C" THEN	comment  step past a certain number of pictures;
         BEGIN
         INTEGER T;
         OUTSTR("SKIP HOW MANY (NEGATIVE TO BACKSPACE):");
         T←CVD(INCHWL);
         IF SYNLAS THEN SYPOS←SYPOS+T ELSE HAPOS←HAPOS+T;
         END
      ELSE
      IF CHR="K" THEN	comment  clear the video synthesizer;
         BEGIN
	 INTEGER T;
	 FOR T←0 STEP 1 UNTIL 7 DO ERASE(SYNMAP(T));
         OUTSTR('15&'12);
         END
      ELSE
      IF CHR="↔" THEN	comment  gronk synthesizer intensity table;
         BEGIN
 	 STRING SI; INTEGER I;

 	 OUTSTR("TRANSFER FUNCTION (about -2.0 to 2.0):");
 	 IF ¬MAPGRY(MAPTF←REALSCAN(SI←INCHWL,I),MAPBT) THEN
            OUTSTR("sorry, ELF not available"&'15&'12);

         END
      ELSE
      IF CHR="S" THEN	comment  change size of displays;
         BEGIN
         STRING INP; INTEGER FOO,INC;
         REAL T;
         OUTSTR('15&'12&"FOR SYNTHESIZER, HALFTONES OR PRINTOUT (S, H OR P)?"); 
         INC←UCONV(INCHWL);
         IF INC="S" THEN
            BEGIN
            INTEGER I;
            SYNLAS←TRUE;
            SETFORMAT(0,2);
            OUTSTR("PICTURE SIZE (1 IS FULLSIZE, NOW"&CVF(SSIZE)&"):"); INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T≠0 THEN SSIZE←ABS(T);
            OUTSTR("ASPECT RATIO (HEIGHT/WIDTH OF SCREEN, NOW"&CVF(SASPECT)&"):");
            INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T>0 THEN SASPECT←T;
            OUTSTR("NUMBER OF PICTURES IN X DIRECTION:"); 
            T←ABS(CVD(INCHWL));
            IF T>0∧T≠SDISWID THEN
               BEGIN
               SDISWID←T;
               SYPOS←0;
               END;
            OUTSTR("NUMBER OF PICTURES IN Y DIRECTION:"); 
            T←ABS(CVD(INCHWL));
            IF T>0∧T≠SDISHIG THEN
               BEGIN
               SDISHIG←T;
               SYPOS←0;
               END;
            SCREEN(-1,-1,1,1);
            DRKEN; RECTAN(-1000,-1000,1000,1000);
            IF SDISHIG*SDISWID>1 THEN
               BEGIN
               OUTSTR("ERASE?");
               IF UCONV(INCHWL)="Y" THEN
               FOR I←0 STEP 1 UNTIL 7 DO
                  PUTDDF("DD"&CVS(I)&".TMP[TMP,HPM]")
               ELSE
                  BEGIN
                  OUTSTR("REDRAW OLD DISPLAY NOW?");
                  IF UCONV(INCHWL)="Y" THEN
                  FOR I←7 STEP -1 UNTIL 0 DO
                  IF SYNMAP(I)≥0 THEN
                     BEGIN
                     IF I=0 THEN MAPGRY(MAPTF,MAPBT);
		     SHOWA('47);
                     GETDDF("DD"&CVS(I)&".TMP[TMP,HPM]");
                     ERASE(SYNMAP(I));
                     DPYUP(SYNMAP(I)); DPYUP(SYNMAP(I));
                     DPYUP(SYNMAP(I)); DPYUP(SYNMAP(I));
		     SHOWA('47);
                     END;
                  HAFTONE←TRUE;
                  OUTSTR("*");
                  DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
                  END;
               END;
            END
         ELSE IF INC="H" THEN
            BEGIN
            SYNLAS←FALSE;
            SETFORMAT(0,2);
            OUTSTR("PICTURE SIZE (1 IS FULLSIZE, NOW"&CVF(HSIZE)&"):"); INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T≠0 THEN HSIZE←ABS(T);
            OUTSTR("ASPECT RATIO (HEIGHT/WIDTH OF SCREEN, NOW"&CVF(HASPECT)&"):");
            INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T>0 THEN HASPECT←T;
            OUTSTR("NUMBER OF PICTURES IN X DIRECTION:"); 
            T←ABS(CVD(INCHWL));
            IF T>0∧T≠HDISWID THEN
               BEGIN
               HDISWID←T;
               HAPOS←0;
               END;
            OUTSTR("NUMBER OF PICTURES IN Y DIRECTION:"); 
            T←ABS(CVD(INCHWL));
            IF T>0∧T≠HDISHIG THEN
               BEGIN
               HDISHIG←T;
               HAPOS←0;
               END;
            SCREEN(-1,-1,1,1);
            DRKEN; RECTAN(-1000,-1000,1000,1000);
            IF HDISHIG*HDISWID>1 THEN PUTDDF("DD.TMP[TMP,HPM]");
            END
         ELSE IF INC="P" THEN
            BEGIN
            SETFORMAT(0,2);
            OUTSTR("ASPECT RATIO OF TTY (CHRS/IN, VERTICAL/HORIZONTAL, NOW "&
               CVF(TASPECT)&"):");
            INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T≠0 THEN TASPECT←ABS(T);
            OUTSTR("WIDTH OF TTY DISPLAYS (NOW "&CVS(TWID)&"):");
            INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T≠0 THEN TWID←ABS(T);
            OUTSTR("MAXIMUM HEIGHT OF TTY DISPLAYS (NOW "&CVS(TLEN)&"):");
            INP←INCHWL;
            T←REALSCAN(INP,FOO);
            IF T≠0 THEN TLEN←ABS(T);
            END;
         END
      ELSE
      IF CHR="F" THEN	comment  high pass filter;
         BEGIN
         INTEGER WINDOW;

         OUTSTR(" WINDOW SIZE:");
         WINDOW←CVD(INCHWL);
         IF WINDOW>1 THEN
            BEGIN
            INTEGER ARRAY T[0:PHAVE];
            PASSHI(PIC[0],WINDOW,T[0]);
            ENHANCE(T[0]);
            COPPIC(T[0],PIC[0]);
            END
         ELSE OUTSTR("aborted"&'15&'12);

         END
α      ELSE
      IF CHR="L" THEN	comment  low pass filter;
         BEGIN
         INTEGER ARRAY T[0:PHAVE];
         IF PIC[PCLN]≥2∧PIC[LNBY]≥2 THEN
            BEGIN
            HAFPIC(PIC[0],T[0],8);
            COPPIC(T[0],PIC[0]);
            END;
         PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
         INITED←FALSE;
         OUTSTR('15&'12);
         OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
            " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
         END
      ELSE
      IF CHR="W" THEN	comment  select a window;
         BEGIN
         INTEGER XL,XH,YL,YH,FOO; REAL A,B;
         STRING INFL;

         OUTSTR('15&'12);
         OUTSTR("LOW X, HIGH X (PIXELS OR FRACTION):"); INFL←INCHWL;
         XL←A←REALSCAN(INFL,FOO);
         XH←B←REALSCAN(INFL,FOO);
         IF ABS(A)≤1 ∧ ABS(B)≤1 THEN
            BEGIN
            XL←A*PIC[LNBY];
            XH←B*PIC[LNBY];
            END;

         IF XL>XH THEN XL↔XH;
         XL←XL MAX 0; XH←XH MIN (PIC[LNBY]-1);
         IF (XH-XL+1)>0 THEN
            BEGIN
            OUTSTR("LOW Y, HIGH Y:"); INFL←INCHWL;
            YL←A←REALSCAN(INFL,FOO);
            YH←B←REALSCAN(INFL,FOO);
            IF ABS(A)≤1 ∧ ABS(B)≤1 THEN
               BEGIN
               YL←A*PIC[PCLN];
               YH←B*PIC[PCLN];
               END;
            IF YL>YH THEN YL↔YH;
            YL←YL MAX 0; YH←YH MIN (PIC[PCLN]-1);
            IF (YH-YL+1)>0 THEN
               BEGIN
               INTEGER ARRAY T[0:PIXDIM(YH-YL+1,XH-XL+1,PIC[BYBI])];
               MAKPIX(YH-YL+1,XH-XL+1,PIC[BYBI],T[0]);
               SELECT(PIC[0],YL,XL,T[0]);
               COPPIC(T[0],PIC[0]);
               OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
                  " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
               PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
               INITED←FALSE;
               END;
            END;

         END
      ELSE
      IF CHR="Z" THEN	comment  change size of a picture;
         BEGIN
         INTEGER FOO;
         STRING INFL;

         IF LENGTH(BACKLOG)=0 THEN
            BEGIN
            OUTSTR('15&'12);
            OUTSTR("DILATION FACTORS (EG. .5 = HALF SIZE) X, Y:"); INFL←INCHWL;
            WID←ABS(REALSCAN(INFL,FOO))*PIC[LNBY]; IF WID=0 THEN WID←PIC[LNBY];
            HIG←ABS(REALSCAN(INFL,FOO))*PIC[PCLN]; IF HIG=0 THEN HIG←PIC[PCLN];
            OUTSTR("NUMBER OF BITS:");  BITS←(CVD(INCHWL) MIN 36);
            IF BITS≤0 THEN BITS←PIC[BYBI];

            IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
                BEGIN
	        PUTPFL(PIC[0],"TMP.TMP[TMP,HPM]");
                PWANT←PIXDIM(HIG,WID,BITS);
                BACKLOG←"Z ";
                END;
            END
         ELSE
            BEGIN
            INTEGER ARRAY T[0:PFLDIM("TMP.TMP[TMP,HPM]")];
            GETPFL("TMP.TMP[TMP,HPM]",T[0]);
	    MAKPIX(HIG,WID,BITS,PIC[0]);
            OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
               " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
            SHRINK(T[0],PIC[0]);
            BACKLOG←"";
            INITED←FALSE;
            END;
         END
      ELSE
      IF CHR="*" THEN	comment  general geometric transformation;
         BEGIN
         INTEGER FOO;
         STRING INFL;
         own string tr1,tr2,tr3;

         IF LENGTH(BACKLOG)=0 THEN
            BEGIN
            integer com;
            OUTSTR('15&'12);
            OUTSTR("Transform (? for help):"); com←inchrw;
            WHILE com="?" DO
               BEGIN
               outstr("
R           Rotate
E           Enter transform matrix

Transform:");
               com←inchrw;
               END;

            COM←COM LAND '137;
            if com="R" then
               begin
               end
            else if com="E" then 
               begin
               outstr("nter transform matrix."&'15&'12);
               outstr("tr[1,1] tr[1,2] tr[1,3] ← ");loded(tr1&'12);tr1←inchwl;
               outstr("tr[2,1] tr[2,2] tr[2,3] ← ");loded(tr2&'12);tr2←inchwl;
               outstr("tr[3,1] tr[3,2] tr[3,3] ← ");loded(tr3&'12);tr3←inchwl;
               outstr("height width bits ← ");loded(cvs(pic[pcln])&" "&cvs(pic[lnby])
                  &" "&cvs( pic[bybi] ) & '12); infl ← inchwl;
               hig←intscan(infl,foo); wid←intscan(infl,foo); bits←intscan(infl,foo);
               backlog←"*E";
               PUTPFL(PIC[0],"TMP.TMP[TMP,HPM]");
               end;

            IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
               BEGIN
               PWANT←PIXDIM(HIG,WID,BITS);
               BACKLOG←"* ";
               END;
            END
         ELSE
            BEGIN
            INTEGER ARRAY T[0:PFLDIM("TMP.TMP[TMP,HPM]")];
            real array tr[1:3,1:3];
            GETPFL("TMP.TMP[TMP,HPM]",T[0]);
            MAKPIX(HIG,WID,BITS,PIC[0]);
            OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
               " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
            infl←tr1;tr[1,1]←realscan(infl,foo);tr[1,2]←realscan(infl,foo);tr[1,3]←realscan(infl,foo);
            infl←tr2;tr[2,1]←realscan(infl,foo);tr[2,2]←realscan(infl,foo);tr[2,3]←realscan(infl,foo);
            infl←tr3;tr[3,1]←realscan(infl,foo);tr[3,2]←realscan(infl,foo);tr[3,3]←realscan(infl,foo);
            pixtrn(t[0],tr,pic[0]);
            BACKLOG←"";
            INITED←FALSE;
            END;
         END
      ELSE
      IF CHR="U" THEN	comment  remove blank border from a picture;
         BEGIN
         INTEGER ARRAY ROW[0:PIC[PCLN]-1],COL[0:PIC[LNBY]-1];
         INTEGER FHX,FHY,I,K,FLX,FLY;

         ROWSUM(PIC[0],ROW[0]);
         K←0; FOR I←0 STEP 1 UNTIL PIC[PCLN]-1 DO K←K+ROW[I];
         K←K/PIC[PCLN]; FLY←0; WHILE ROW[FLY]<K/2 DO FLY←FLY+1;
              FHY←PIC[PCLN]-1; WHILE ROW[FHY]<K/2 DO FHY←FHY-1;
         IF ROW[FLY]<K/1.5 THEN FLY←FLY+1;
         IF ROW[FLY]<K/1.5 THEN FLY←FLY+1;

         COLSUM(PIC[0],COL[0]);
         K←0; FOR I←0 STEP 1 UNTIL PIC[LNBY]-1 DO K←K+COL[I];
         K←K/PIC[LNBY]; FLX←0; WHILE COL[FLX]<K/2 DO FLX←FLX+1;
              FHX←PIC[LNBY]-1; WHILE COL[FHX]<K/2 DO FHX←FHX-1;

         WID←FHX-FLX+1; HIG←FHY-FLY+1;

         IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
            BEGIN
            INTEGER ARRAY T[0:PHAVE];

	    COPPIC(PIC[0],T[0]);
            MAKPIX(HIG,WID,BITS,PIC[0]);
            SELECT(T[0],FLY,FLX,PIC[0]);
            OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
               " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
            PHAVE←PWANT←PIXDIM(HIG,WID,BITS);
            INITED←FALSE;
            END;
         END
      ELSE
      IF CHR="N" THEN	comment  apply noise remover;
         BEGIN
         CLEAN(PIC[0]);
         OUTSTR('15&'12);
         END
      ELSE
      IF CHR="V" THEN	comment  apply interest operator;
         BEGIN
         INTEGER WINDOW;
         OUTSTR(" WINDOW SIZE:"); WINDOW←CVD(INCHWL);
         IF WINDOW≥1 THEN
            BEGIN
            INTEREST(PIC[0],WINDOW,PIC[0]);
            OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
               " BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
            PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
            INITED←FALSE;
            END
         ELSE OUTSTR("aborted"&'15&'12);
            
         END
      ELSE
      IF CHR="M" THEN	comment  pixel modification;
         BEGIN
         PRELOAD_WITH -1;
         OWN INTEGER ARRAY PERM[-1:1024];
         STRING INP; INTEGER FOO,I,J;
         INTEGER LAST,THIS;

         IF PERM[-1]=PIC[BYBI] THEN
            BEGIN
            OUTSTR(" ENTER NEW TRANSFORM?");
            INP←UCONV(INCHRW);
            END ELSE INP←"Y";
         OUTSTR('15&'12);
         IF INP="Y" THEN
            BEGIN
	    PERM[-1]←PIC[BYBI];
            OUTSTR(CVS(2↑PIC[BYBI])&" TOTAL GREY LEVELS, ENTER HOW MANY:");
            FOO←(CVD(INCHWL) MAX 2) MIN 2↑PIC[BYBI];
            LAST←0;
            FOR I←0 STEP 1 UNTIL FOO-1 DO
               BEGIN
               THIS←((1 ASH PIC[BYBI])-1)*I%(FOO-1);
               OUTSTR(CVS(THIS)&"→");
               PERM[THIS]←CVD(INCHWL);
               IF THIS>LAST THEN
               FOR J←LAST STEP 1 UNTIL THIS DO
                  PERM[J]←(PERM[LAST]*(THIS-J)+PERM[THIS]*(J-LAST))%(THIS-LAST);
               LAST←THIS;
               END;
            FOR I←0 STEP 1 UNTIL 2↑PIC[BYBI]-1 DO
               PERM[I]←(PERM[I] MAX 0) MIN (2↑PIC[BYBI]-1);
            END;
         PERBIT(PIC[0],PERM[0]);
         END
      ELSE
      IF CHR="G" THEN	comment  graph a histogram;
         BEGIN
         INTEGER ARRAY HIST[0:2↑PIC[BYBI]];
         INTEGER FOO,I,J,MAV,CHN;
         CHN←GDDCHN(-1);
         OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
         FOO←2↑PIC[BYBI]-1;
         HISTOG(PIC[0],HIST[0]);
         SCREEN(-.3,-.2,1.1,1.2);
         DRKEN; RECTAN(-100,-100,100,100);
         LITEN;
         LINE(0,0,0,1); LINE(0,1,1,1);
         LINE(1,1,1,0); LINE(1,0,0,0);
         LINE(0,.5,1,.5); LINE(0,.25,1,.25); LINE(0,.75,1,.75);
         LINE(.5,0,.5,1); LINE(.25,0,.25,1); LINE(.75,0,.75,1);
         MAV←0; FOR I←0 STEP 1 UNTIL FOO DO MAV←MAV MAX HIST[I];
         MAV←MAV+1;
         FOR I←1 STEP 1 UNTIL FOO DO
            LINE((I-1)/FOO,HIST[I-1]/MAV,I/FOO,HIST[I]/MAV);
         TXTPOS(0,-1/10,1/24,1/12); TEXT("0");
         TXTPOS(1-LENGTH(CVS(2↑PIC[BYBI]))/24,-1/10,1/24,1/12);
         TEXT(CVS(2↑PIC[BYBI]-1));
         TXTPOS(-.07,0,1/24,1/12); TEXT("0");
         TXTPOS(-.07-(LENGTH(CVS(MAV))-1)/24,1-1/12,1/24,1/12); TEXT(CVS(MAV));
         ERASE(CHN);
         FOR J←1,1,1,1,1 DO DPYUP(CHN);
         HAFTONE←FALSE;  LXB←LYB←-1; UXB←UYB←1;
         SHOW(CHN);
         OUTSTR("*");
         DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
         RDDCHN(CHN);
         SHOW(-1);
         END
      ELSE
      IF CHR="J" THEN	comment  graph a histogram;
         BEGIN
         INTEGER ARRAY HIST[0:2↑PIC[BYBI]];
         INTEGER FOO,I,J,L,MAV,CHN;
         CHN←GDDCHN(-1);
         OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
         FOO←2↑PIC[BYBI]-1;
         HISTOG(PIC[0],HIST[0]);
         SCREEN(-.3,-.2,1.1,1.2);
         DRKEN; RECTAN(-100,-1000,1000,1000);
         LITEN;
         LINE(0,0,0,1); LINE(0,1,1,1);
         LINE(1,1,1,0); LINE(1,0,0,0);
         LINE(0,.5,1,.5); LINE(0,.25,1,.25); LINE(0,.75,1,.75);
         LINE(.5,0,.5,1); LINE(.25,0,.25,1); LINE(.75,0,.75,1);
         MAV←0; FOR I←0 STEP 1 UNTIL FOO DO MAV←MAV + HIST[I];
         L←J←0;
         FOR I←1 STEP 1 UNTIL FOO DO
            BEGIN
            L←J;
            J←J+HIST[I];
            LINE((I-1)/FOO,L/MAV,I/FOO,J/MAV);
            END;
         TXTPOS(0,-1/10,1/24,1/12); TEXT("0");
         TXTPOS(1-LENGTH(CVS(2↑PIC[BYBI]))/24,-1/10,1/24,1/12);
         TEXT(CVS(2↑PIC[BYBI]-1));
         TXTPOS(-.07,0,1/24,1/12); TEXT("0");
         TXTPOS(-.07-(LENGTH(CVS(MAV))-1)/24,1-1/12,1/24,1/12); TEXT(CVS(MAV));
         ERASE(CHN);
         FOR J←1,1,1,1,1 DO DPYUP(CHN);
         SHOW(CHN);
         HAFTONE←FALSE;  LXB←LYB←-1; UXB←UYB←1;
         OUTSTR("*");
         DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
         RDDCHN(CHN);
         SHOW(-1);
         END
      ELSE
      IF CHR="E" THEN	comment  apply histogram normalizer;
         BEGIN
         ENHANCE(PIC[0]);
         OUTSTR('15&'12);
         END
      ELSE
      IF CHR="Y" THEN	comment  apply vert sync loss correction;
         BEGIN
         SYNCHRONIZE(PIC[0]);
         OUTSTR('15&'12);
         END
      ELSE
      IF CHR="Q" THEN	comment  exit;
         BEGIN
	 if outddcalled then OUTDD('40&'15&'12);
         CALL(0,"EXIT");
         END
      ELSE
         BEGIN       comment  an unrecognized character;
         IF CHR='12 THEN OUTSTR('15) ELSE
         OUTSTR("?"&'15&'12);
         END;
      END;
   PHAVE←PWANT;
   END;
END "PIX";